El optimizador de .NET de Windows que monopoliza la CPU

Paso mucho tiempo en la biblioteca. En general, las bibliotecas son sitios tranquilos y silenciosos donde puedes concentrarte en hacer lo que tienes que hacer sin que nada o nadie te distraiga.

Con la llegada de los ordenadores a las bibliotecas, es habitual escuchar los soniditos de Windows que se ejecutan al arrancar o al apagar el ordenador. Aunque en más de una ocasión me he preguntado si la gente no sabrá utilizar el botón de control de volumen para poner en mute el altavoz del sistema, el ruido que más me molesta -con diferencia- del que producen los ordenadores es el ruido del ventilador.

Ironías de la vida, el que más me molesta es el de mi propio ordenador. Hace un tiempo, incluso me planteé relegar el portátil a casa, un entorno más ruidoso (en general) y utilizar para la biblioteca un portátil viejo pero más silencioso.

El caso es que un día, no sé exactamente porqué, el ruidoso ventilador dejó de estar funcionando todo el rato a máxima potencia. Es cierto que cambié la configuración de la BIOS (precisamente, para que el ventilador dejara de funcionar todo el tiempo) e incluso instalé un programa para controlar la temperatura y la velocidad de giro... Nada funcionó... Hasta que un día, sin más, el ventilador del portátil dejó de hacer ruido.

Ahora, de vez en cuando, el ventilador se pone a toda máquina, pero normalmente es sólo cuando el procesador está cargado (y estoy haciendo alguna tarea que le da caña al procesador); es decir, el ventilador gira al máximo porque el procesador lo necesita.

Sin embargo, hoy -de nuevo en la biblioteca- el ventilador se ha activado -sin motivo aparente- y se ha puesto a funcionar a todo trapo.

Después de analizar los consumos de memoria de las diferentes aplicaciones, he creído que el problema sería de Chrome... Pero he ido apagando una aplicación tras otra, y el ventilador seguía a tope. He pensado que quizás había alguna cosa en segundo plano haciendo de las suyas, así que he decidido reiniciar para matar de raíz el origen del problema.

Al empezar el proceso de reinicio, he visto cuál era el origen del elevado consumo de CPU y por tanto, de velocidad de giro del ventilador: Windows Update (que se ha puesto a instalar alguna actualización).

Cuando el portátil ha arrancado de nuevo, no sólo el ventilador no ha vuelto a su estado de reposo habitual, sino que se ha animado todavía más. Así ha sido cuando, buscando entre los procesos -sin encontrar nada- he abierto el Resource Monitor.

Ahí ha quedado retratato un programa, consumiendo él solito un 49% de la CPU: mscorsvw.exe. Después de matar varias veces el proceso, y ver cómo volvía a aparecer, he visto que lo que fuera estaba ligado a un servicio. He buscado en Google y resulta que el culpable, una vez más, es Microsoft; el mscorsvw.exe es un optimizador de .Net.

Por lo visto, .NET tiene que ser precompilado para poder funcionar adecuadamente, así que, después de instalar una actualización, se lanza este optimizador. La cosa es que, según se indica en esta página de MSDN, el proceso se ejecuta con prioridad baja, precisamente, para no consumir los recursos de la máquina.

Sin embargo, algo no debe funcionar como debe si el post se titula, precisamente, ¿Qué es mscorsvw.exe y porqué está monopolizando mi CPU? (traducción propia). O quizás es que, desde entonces (el artículo es de 2005), Microsoft ha cambiado su política y ahora ya no se ejecuta en prioridad baja...

Mi queja, como siempre, no tiene que ver con el que deba compilarse el código .NET; sinceramente, eso me da igual. Lo que me fastidia -como casi siempre- es que no se me informe, no se me pregunte o no se me pida permiso para hacerlo, especialmente cuando impacta en el rendimiento de mi trabajo. ¿Tan complicado sería lanzar un cuadro de diálogo que diga: "El sistema debe realizar tareas de optimización del paquete 2354325 de .NET. Esto puede llevar unos minutos." A continuación, se lanzaría una ventanita con una barra de progreso -que debería marcar el progreso real, para variar- con un botón de "Cancelar". Si la tarea se cancela, podría volver a preguntarse pasado un tiempo (al estilo de las actualizaciones de Windows). Quizás, con un poco más de trabajo, el propio sistema podría lanzar la optimización cuando detectara de que el sistema no está haciendo nada (en vez de lanzar el salvapantallas, por ejemplo)...

El artículo también dice otras cosas, como que en sistemas 64bits, los dos optimizadores (el de 32 y el de 64 bits) intentan no ejecutarse a la vez, cosa que en mi caso, no ha sido así...

En cualquier caso, dado que Microsoft no ofrece una manera más elegante para hacerlo, he tenido que parar los servicios de optimización a saco:
  • Botón derecho sobre My Computer, Manage.
  • En Services and Applications, selecciono Services.
  • Busco entre los servicios hasta dar con 4 servicios de optimización!!! (dos de los cuales estaban ejecutándose) y los detengo:
    • Microsoft .NET Framework NGEN v2.0.50727_X64
    • Microsoft .NET Framework NGEN v2.0.50727_X86
    • Microsoft .NET Framework NGEN v4.0.30319_X64
    • Microsoft .NET Framework NGEN v4.0.30319_X86
Al momento, el ventilador del portátil ha bajado de revoluciones y he podido continuar -es un decir- con mi trabajo. En total -incluído el tiempo de escribir este post- he perdido casi una hora de tiempo.

Comentarios